/**
 * 事件模块实例
 */
export default class EventListener<T extends string> {
  listenes = {} as Record<T, Function[]>;
  constructor(eventNameList: readonly T[]) {
    eventNameList.forEach((eventName) => {
      this.listenes[eventName] = [];
    });
  }
  /**
   * 监听事件
   * @param eventName 事件名称
   * @param callback 回调函数
   */
  on(eventName: T, callback: (...args: any[]) => void) {
    this.listenes[eventName].push(callback);
  }
  /**
   * 触发事件
   * @param eventName 事件名称
   * @param args 传递参数
   */
  emit(eventName: T, ...args: any[]) {
    this.listenes[eventName].forEach((callback) => callback(...args));
  }
}
